package modelo.moviles.naves;

import modelo.*;
import modelo.estrategias.*;
import modelo.moviles.exceptions.ArsenalSinArmas;
import modelo.moviles.balas.Bala;
import modelo.moviles.balas.BalaTorpedoRastreador;
import modelo.armas.*;




public class Bombardero extends NaveArmada {

	private Algo42 objetivo;

	public Bombardero(Nivel nuevoNivel){
		super (nuevoNivel);

		/* 	"El Bombardero va a tener 3 armas: 1 Laser , 1 TorpedoRastreador y 1 Cohete " */
		this.getArsenal().agregarArma(new Laser (nuevoNivel));
		this.getArsenal().agregarArma(new TorpedoRastreador (nuevoNivel));
		this.getArsenal().agregarArma(new Cohete(nuevoNivel));

		this.setEnergia(new Porcentaje());
		this.getEnergia().incrementarPorcentaje(100);
		
		this.setObjetivo(nuevoNivel.getAlgo42());
		
		this.setPuntaje(50);
		this.setEstrategia(new EstrategiaZigZag ());
	}
	
	public Algo42 getObjetivo() {
		return objetivo;
	}
	public void setObjetivo(Algo42 objetivo) {
		this.objetivo = objetivo;
	}
	
	
	/* "la nave estalla y devuelve su puntaje" */
	public void destruirse(){
		this.estallar();
	
		this.getObjetivo().agregarArsenal(this.getArsenal());
		this.getNivel().sumarPuntaje(this.puntaje);
	}
	
	/* "dispara" */
	public Bala disparar() throws ArsenalSinArmas{
		Bala bala;
		
		try {
			bala = arsenal.disparar();
		
			if(bala.precisaObjetivo()) {
				BalaTorpedoRastreador torpedo = (BalaTorpedoRastreador)bala;
				torpedo.setObjetivo(this.getObjetivo());
			}
	
			bala.setPosicion(new Posicion(this.getFila() + 10, getColumna()));
			return bala;
		} catch (ArsenalSinArmas e){
			throw e;
		}
			
	}
	
}
